rysuj       

   ; sprajt 200 w banku $4000-7fff to $7200
             __znak  = 32
             __sprlo = 33
             __sprhi = 34
             __znak2 = 35 ; 0/1/2 [char-column] in sprite
             __nazlo = 36 ; adres nazwy spod $0400
             __nazhi = 37
             __temp  = 38
             __line  = 39 ; 0/1/2 line of sprite to be written [added 4 dec 2006]

	lda liczba
_a1	cmp #68
	bcc _Zapja

	sec
	sbc #1
	jmp _a1
	
_Zapja	sta liczba_temp

	lda #0
	sta __line
	jsr szmatex

	inc liczba_temp

	lda #1
	sta __line
	jsr szmatex

	inc liczba_temp


	lda #2
	sta __line
	jsr szmatex
	

szmatex

        lda #0
        sta __temp
        sta __znak
        sta __znak2
        sta _sprlo
        lda #$72	; $7200 onwards - LCD sprites 
        sta _sprhi

        lda liczba_temp
        asl
        rol __temp
        asl
        rol __temp
        asl
        rol __temp
        asl
        rol __temp   ; 'names' entries are 16 chrs long each

        sta __nazlo
        lda __temp
        clc
        adc #$95 ;  $9500 - NAMES
        sta __nazhi  ; store tune name pointer (names@9500 + tunenumber * 16)
	; at this point __nazhi and __nazlo contain -> names + 16 * liczba
	; giving proper start addy of [liczba] numbered tune

ahuja	ldy __znak2

        lda __line
;        cmp #1
        bne line_1
        lda sprtable,y
	jmp line_end
line_1  cmp #1
	bne line_2
	lda sprtable1,y
	jmp line_end
line_2  lda sprtable2,y
                
line_end 
        sta _sprpos    ; sprite positon for writing char-line

        ldy __znak
        lda (__nazlo),y ; load char from 'names'
        sta _znak

        jsr chrspr	; copy char to selected sprite location

        inc __znak2
        lda __znak2
        cmp #3		; if char pointer exceeds 3 then go write on next sprite
        bcs nextspr


__xc    inc __znak
        lda __znak
        cmp #16
        bne __xa
        rts
__xa
       jmp ahuja

;;;;;;;;;;;;;;;;;;;;;;;;

nextspr
        lda _sprlo
        clc
        adc #$40
        sta _sprlo
        bcc __xb
        inc _sprhi
__xb
        lda #0
        sta __znak2
        jmp __xc

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

_lobyte = $10 ;byte $0	;tymczas - wyliczenie adresu znaku z charsetu
_hibyte = $11 ;byte $0
_sprlo  = $12	;adres pod ktory jebany jest sprajt
_sprhi  = $13
_onspr  = $14 ; pozycja docelowa na sprajcie
_onchr  = $15 ; linia znaku pobieranego z charsetu
_znak   = $16 ; ZNAK DO WPISANIA W SPRITE
_sprpos = $17 ; poz wskaznika na sprite (linia*8+nr.poz (w zakresie 0~2))

; Y _znak
; X _sprpos
; A sprite number

chrspr

dalej	;inc _znak
	lda #0
	sta _hibyte
	LDA _znak
	jsr mnoz ; mnozy akku i pakuje w zer0page
	
	clc
	lda _hibyte
	adc #$3e         ; C U S T O M :charsy $3e00-3fff
	sta _hibyte	; ustala adres fontow (dodaje)

	LDA _sprpos 	;poz na sprite
	sta _onspr	;temp zawiera miejsce do sprajta
	ldy #6		;linia chara (chary sa 7 lini zeby sie w sprite zmiescily)
	sty _onchr	;linia chara
_petla1
;	ldy _onchr
	LDA (_lobyte),y	;zaladuj linie z chara
	ldy _onspr	;zaladuj miejsce dla sprajta

	ldx nowplaying
	cpx liczba_temp
	bne z1
	eor #255
z1	

	sta (_sprlo),y	; zapisz linie pod adresem sprajta + Y
;;;	sta $d020
	dey
	dey
	dey 		; zmniejsz adres o 3 (poprzednia linia dla znaku w sprajcie)

        sty _onspr	; zapisz go do _onspr
;
 	dec _onchr	; zmanijesz znacznik dla chara
;
	ldy _onchr
        bpl _petla1
;	sec 		; C=1 gdy znak byl rysowany
	RTS

;;;;;;;;;;;;;;;;;;

mnoz
	ASL ;a
	ROL _hibyte
	ASL ;a
	ROL _hibyte
	ASL ;a
	ROL _hibyte
	sta _lobyte
	rts

sprtable   .byte 6*3,6*3+1,6*3+2
sprtable1  .byte 13*3,13*3+1,13*3+2
sprtable2  .byte 20*3,20*3+1,20*3+2
;sprtable2  .byte 19,20,21

liczba_temp .byte 0

